/**
  * 作用: 定义匿名函数
  * 基本语法:
    * 没有参数: () => console.log('xxxx')
    * 一个参数: i => i+2
    * 大于一个参数: (i,j) => i+j
    * 函数体不用大括号: 默认返回结果
    * 函数体如果有多个语句, 需要用{}包围，若有需要返回的内容，需要手动返回
  * 使用场景: 多用来定义回调函数

  * 箭头函数的特点：
      1、简洁
      2、箭头函数没有自己的this，箭头函数的this不是调用的时候决定的，而是在定义的时候处在的对象就是它的this
    3、扩展理解： 箭头函数的this看外层的是否有函数，
          如果有，外层函数的this就是内部箭头函数的this，
          如果没有，则this是window。
 */
let fun = function() {
  console.log('fun')
}
fun()

//没有形参，并且函数体只有一条语句
let fun1 = () => console.log('fun1')
fun1()

//一个形参，并且函数体只有一条语句
let fun2 = val => console.log(val)
fun2(666)

//形参是一个以上
let fun3 = (x, y) => x + y
console.log(fun3(55,45))

 //函数体有多条语句
let fun4 = (x, y) => {
  console.log(`x:${x}, y:${y}`)
  return x + y
}
console.log(fun4(10,11))

let obj = {
  name: 'limi',
  getName() {
    setTimeout(()=>{
      //箭头函数的this指向外面getName()函数的this, 外面函数的this就是obj
      console.log(this) 
      console.log(this.name)
    }, 1000)
  }
}
obj.getName() //{ name: 'limi', getName: [Function: getName] }


let test = () => console.log(this) // window
test()